02 - 埋点的四种做法
前置:01 篇的 span 结构与操作类型。
本篇回答:这些 span 具体由谁产生。四条路线的改动面从"每个调用点加两行"到"一行代码都不动",但改动面越小,能看见的东西也越少 —— 这个取舍怎么算。
本篇会用到的词:
| 词 | 意思 |
|---|---|
| instrumentor | 埋点器。一个负责"把某个库的调用变成 span"的组件,比如专门管 openai 这个包的那个 |
| 猴补丁(monkey patch) | 运行时把一个已经存在的函数替换成自己的版本,原函数在新版本里被调用。埋点库靠它在不改你代码的前提下插入计时和属性记录 |
| entry point | Python 包在安装时向系统声明"我提供了某类插件"的机制。写在 pyproject.toml 里,安装后可被其他程序按组名枚举出来 |
| 字节码注入 | Java 侧的等价手段。JVM 启动时由 agent 拦截类加载,在方法体前后织入计时代码 |
| uprobe | Linux 内核提供的用户态函数断点。挂上去之后,目标进程每次调用该函数都会触发一段 eBPF 程序,目标进程本身无感 |
| 旁路 | 采集器不在业务进程里,而是从外部观察它 —— 内核探针或网络代理都属于旁路 |
一、四条路线
按"要改多少东西"排开,四条路线是一条连续的谱系:
下面逐条拆。